package binaryTree;

public class Class606 {
    //    左右子树都存在，那就每个都包()继续递归
//    只有左子树，只给左子树包()继续递归
//    只有右子树，左子树用()表示，右子树包()继续递归
//    StringBuilder sb= new StringBuilder();
//    public StringBuilder tree2str(TreeNode root) {
//        if (root==null){
//            sb.append(")");
//            return sb;
//        }
//        if (root.left!=null&&root.right!=null){
//            sb.append(root.val).append("(");
//            tree2str(root.left);
//            tree2str(root.right);
//        }
//
//        if (root.left!=null){
//            sb.append(root.val).append("(");
//            tree2str(root.left);
//            tree2str(root.right);
//        }
//
//        if (root.right!=null){
//            sb.append(root.val).append("(");
//            tree2str(root.left);
//            tree2str(root.right);
//        }
//
//        return  sb;
//    }



    StringBuilder str=new StringBuilder();//StringBuilder的append()方法添加括号

    public String tree2str(TreeNode root) {
        DFS(root);
        return str.toString();
    }

    //  CKG TODO 2023/4/5:整个还是前序遍历的顺序  虽然在每个遍历顺序前面都加上了判断条件 整体看这个题目的条件
    void DFS(TreeNode root){
        if(root==null){
            return;
        }
        str.append(root.val);//.val获得root域的值
        if(root.left!=null){
            str.append('(');
            DFS(root.left);
            str.append(')');
        }
        if(root.left==null&&root.right!=null){
            str.append("()");
        }

        if(root.right!=null){
            str.append('(');
            DFS(root.right);
            str.append(')');
        }
    }

    public static void main(String[] args) {
        TreeNode treeNode1 = new TreeNode(1);
        TreeNode treeNode2 = new TreeNode(2);
        TreeNode treeNode3 = new TreeNode(2);
        treeNode1.right=treeNode2;
        treeNode1.left=treeNode3;
        Class606 class606 = new Class606();
        System.out.println(class606.tree2str(treeNode1).toString());

    }




}
